<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
            字符串--就是一句话--网页的内容都是字符串

            创建
                字面量 --普通的字符串类型(比较多)
                    1-双引号
                        '123aa'
                    2-单引号
                        "2323"
                    3-反引号
                        `aaa 
                        bb`
                构造函数   --字符串对象（知道）
                    new String('aa')  

                    字符串对象--也叫伪数组-类数组（有下标-有length）
           字符串 
                属性
                    length--字符串的长度
                    下标--从0开始
                方法 （常用的） ***字符串的方法都不改变字符串本身，都是返回一个改变以后的结果
                    方法多，常用的方法 不多       
        */
        var username = 'zhang san';
        var xxxName = "aname";
        var testName = `那么`;
        console.log(typeof testName);

        // --字符串对象  可以当做普通的字符串去使用
        // --普通的字符串 可以当做字符串对象去使用
        var str1 = new String('hello');
        console.log(typeof str1);//object

        // helloaaa
        console.log(str1 + 'aaa');
        // username--普通的字符串 可以当做字符串对象去使用 length属性--字符串的长度
        console.log(username.length);//9


        console.log(username);//普通的字符串
        console.log(str1);//字符串对象

        // 属性
        console.log(str1.length);
        console.log(str1[0]);
        // 能被遍历，很少用
        for (var i = 0; i < str1.length; i++) {
            console.log(str1[i]);
        }

        // 方法

        // charAt(索引) 获取 对应下标位置上的字符
        var str3 = 'hello world';
        console.log(str3.charAt(1));
        console.log(str3[1]);

        // 区别
        console.log(str3.charAt(20));//''
        console.log(str3[20]);//undefined

        // indexOf inclueds
        //获取llo 第一次出现的下标
        console.log(str3.indexOf('llo'));//1
        //获取llo 最后一次出现的下标
        console.log(str3.lastIndexOf('l'));//9
        // 判断参数是否在 str3中
        console.log(str3.includes('l'));//true
        console.log(str3.includes('hello'));//true
        console.log(str3.includes('Hello'));//false

        // 是否以参数开头
        console.log(str3.startsWith('Hello'));//false
        console.log(str3.startsWith('hello'));//true
        console.log(str3.startsWith('he'));//true
        console.log(str3.startsWith('h'));//true
        // 是否以参数结尾
        console.log(str3.endsWith('h'));//f
        console.log(str3.endsWith('ld'));//t


        // - substring--slice` 是用来截取字符串使用的 *****
        // - 语法： `substring(从哪个索引开始，到哪个索引截止)`，包含开始索引，不包含结束索引
        // - 语法： `slice(从哪个索引开始，到哪个索引截止)`，包含开始索引，不包含结束索引
        var str3 = 'hello World';
        console.log(str3.slice(2, 5));//llo
        console.log(str3);

        // 不传第二个参数，从2位置截取到最后
        console.log(str3.slice(2));//llo world
        console.log(str3.substring(2));//llo world


        // - substr` 也是用来截取字符串的
        // - 语法：`substr(从哪个索引开始，截取多少个)`

        console.log(str3.substr(2, 3));//llo
        console.log(str3.substr(2));//llo world  不传第二个，截取到最后



        // ### toLowerCase 和 toUpperCase
        // - 这两个方法分别使用用来给字符串转成 **小写字母** 和 **大写字母** 的
        console.log(str3.toUpperCase());//HELLO WORLD
        console.log(str3.toLowerCase());//HELLO WORLD


        // replace(子串，替换成什么)--替换第一个匹配到的内容
        // 
        var str4 = '你是垃圾吗，玩的太垃圾了';
        var r = str4.replace('垃圾', '**');
        console.log(str4);
        console.log(r);//你是**吗，玩的太垃圾了

        // 替换所有匹配到的内容
        var r2 = str4.replaceAll('垃圾', '**')
        console.log(r2);//你是**吗，玩的太**了


        // split 
        // ---分割字符串--结果是数组
        var str5 = 'a=1&baa=1112&c=2';
        var arr = str5.split('&');
        console.log(arr);//['a=1', 'baa=1112', 'c=2']



        console.log(arr.join('&'));

        // 把字符串转为一个数组
        console.log(str5.split(''));


        // trim --首尾去空格
        var str6 = ' hello word   '
        console.log(str6);
        // hello word
        console.log(str6.trim());




    </script>

</body>

</html>